#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/6/11 0:01
# @USER    : Shengji He
# @File    : SearchArrayRotated.py
# @Software: PyCharm
# @Version  : Python-
# @TASK:
from typing import List


class Solution:
    def search(self, nums: List[int], target: int) -> int:
        """
        Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

        (i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).

        You are given a target value to search. If found in the array return its index, otherwise return -1.

        You may assume no duplicate exists in the array.

        Your algorithm's runtime complexity must be in the order of O(log n).

        Example 1:
            Input: nums = [4,5,6,7,0,1,2], target = 0

            Output: 4
        Example 2:
            Input: nums = [4,5,6,7,0,1,2], target = 3

            Output: -1

        :param nums: List[int]
        :param target: int
        :return: int
        """
        # if len(nums) == 0:
        #     return -1
        # if target >= nums[0]:
        #     for i in range(len(nums)):
        #         if target == nums[i]:
        #             return i
        #         elif target < nums[i]:
        #             return -1
        # else:
        #     for i in range(len(nums) - 1, -1, -1):
        #         if target == nums[i]:
        #             return i
        #         elif target > nums[i]:
        #             return -1
        # return -1
        if not nums:
            return -1
        l, r = 0, len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            if nums[mid] == target:
                return mid
            if nums[0] <= nums[mid]:
                if nums[0] <= target < nums[mid]:
                    r = mid - 1
                else:
                    l = mid + 1
            else:
                if nums[mid] < target <= nums[len(nums) - 1]:
                    l = mid + 1
                else:
                    r = mid - 1
        return -1




if __name__ == '__main__':
    print('done')
